哈囉!大家好,今天我們要來學習如何拆解並認識 Go 的程式結構。
還記得我們在 Day 2 的時候,有介紹到 Go module 嗎?如果忘記了可以再回去看一下~
疑?那這個跟 Module 有什麼關係呢?
當然有!!! 在 Go 裡面,一個 module 可以有很多個 package(套件),也就是說今天我們建立了一個專案,那這個專案名稱就是我們的 module,而專案底下的其他資料夾就會是 package。
👉 module 就像一本書,裡面有很多章節(packages)。
什麼意思呢?🤔
一開始建立 Go 專案的時候,是不是會輸入指令 go mod init app
(app 是我命名專案資料夾的名稱),輸入完之後,系統就自動生成了一個 go.mod
檔案。而這個檔案裡面的內容就寫著:
module app
go 1.25.0
有發現嗎?剛剛建立的專案名稱,就是 module 名稱。
為什麼會特別講到這部分? 因為它是 import 路徑(package)的開頭,非常重要。
那要怎麼建立 package 呢?
通常會建立在與 main.go
同層的資料夾裡面,我們看以下的圖示:
app/ ← module
│── go.mod
│── main.go
└── example/ ← package example
└── example1.go
└── example2.go
Package 底下可以有多個 .go
檔案,但一個 .go
檔案裡面只能宣告一個 package,所以以上面的檔案結構來說,example1.go
和 example2.go
都是屬於 example
package,可以在 main.go
檔案裡一起 import "app/example"
使用:
// example1.go 和 example2.go 的 package
package example
👉 所以 package
的單位是 資料夾,不是單個 .go
檔案。
在 package 的命名,Go 有一些慣例:
另一個要注意的是,我們寫在 package 裡面的 function 名稱,要大寫字母開頭,才能夠匯出被引用!
範例:
package example
// 大寫 Add 可供其他 package 使用
func Add(a, b int) int {
return a + b
}
// 小寫 sub 只能在 example 內使用
func sub(a, b int) int {
return a - b
}
了解 module 和 package 之間的關係之後,就來實作一個簡單的範例吧!
先建立一個專案,然後新增一個 calc
資料夾(package)和 calc.go
檔案:
app/
│── go.mod
│── main.go
└── calc/
└── calc.go
在 calc.go
檔案輸入以下內容:
package calc
func Add(a, b int) int{
return a + b
}
在 main.go
檔案裡面輸入以下內容:
package main
import (
"fmt"
"app/calc" // 匯入剛剛建立的 calc package
)
func main() {
var a, b int
fmt.Print("請輸入第一個數字")
fmt.Scanln(&a)
fmt.Print("請輸入第二個數字")
fmt.Scanln(&b)
fmt.Println("總和:", calc.Add(a, b)) // 呼叫 calc package 裡面的 Add 函式
}
然後執行 main.go
程式,就會得到輸出結果:
這樣就完成了一個簡單的範例了!
雖然我們用了一個很簡單的範例來介紹 module 和 package 之間的操作,但實際上我們在引用這些 package 的時候還是要特別留意,必須思考一下你想要怎麼規劃和拆解你的專案程式,哪些函式要放在同一個 package;哪一些 function 需要匯出使用;哪一些不用,這些都是要先想好的唷!
好的,以上就是這個章節 module 和 package 的介紹~